package com.fintech.third.service.bairong;

import java.util.Map;

import com.fintech.common.util.ApiResponse;
import com.fintech.third.model.EquipmentInfor;
import com.fintech.third.model.bairong.CurrentEquipmentInformationReport;
import com.fintech.third.model.bairong.CurrentEquipmentPackageInfo;
import com.fintech.third.model.bairong.EquipmentInfo;
import com.fintech.third.model.bairong.EquipmentSpecialList;
import com.fintech.third.model.bairong.IncomeLevel;
import com.fintech.third.model.bairong.IncomeMonthLevel;
import com.fintech.third.model.bairong.LoanFacilityInformation;
import com.fintech.third.model.bairong.LoanFacilityPackageInfo;
import com.fintech.third.model.bairong.LoginFacilityInformation;
import com.fintech.third.model.bairong.LoginFacilityPackageInfo;
import com.fintech.third.model.bairong.OccApplyLoanInfo;
import com.fintech.third.model.bairong.OccRuleInformation;
import com.fintech.third.model.bairong.OccScoreInfo;
import com.fintech.third.model.bairong.PaymentConsum;
import com.fintech.third.model.bairong.RegisterFacilityInformation;
import com.fintech.third.model.bairong.RegisterFacilityPackageInfo;
import com.fintech.third.model.bairong.SpecialList;
import com.fintech.third.model.bairong.Stability;

import net.sf.json.JSONObject;

/**
 * 百融e卡贷产品接口
 * @author tang.pw
 *
 */
public interface OneCreditCardService {
	
	/**
	 * 百融规则:特殊名单,多次申请,收支等级,评分(规则是在数据的基础上结合风控技术制定的，直接用于判定是否欺诈；命中每条规则的权重范围是0-100，值越大严重程度越高；当个体命中规则权重之和超过80，建议拒绝)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return OccRuleInformation
	 */
	public ApiResponse<OccRuleInformation> occRuleReport (JSONObject json, String serialNum, String loanId, String channel);
	
	/**
	 * 特殊名单核查(用户本人、联系人、与用户有亲密关系的人（一度关系、二度关系）是否命中不良、短时逾期、资信不佳、拒绝、失联等百融特殊名单，以识别个体是否有虚假申请、欺诈等风险)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return SpecialList
	 */
	public ApiResponse<SpecialList> occSpecialListReport(JSONObject json, String serialNum, String loanId, String channel);
	
	
	
	/**
	 * 多次申请核查(用户近3个月、6个月、12个月在百融的虚拟信贷联盟(银行、非银)中的多次信贷申请情况)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return OccApplyLoanInfo
	 */
	public ApiResponse<OccApplyLoanInfo> occApplyLoan(JSONObject json, String serialNum, String loanId, String channel);
	
	
	
	/**
	 * 稳定性评估(用户身份证、手机号、邮箱、姓名、座机号等用户身份信息与百融行为库中的信息是否匹配，来检验信息的关联性和一致性)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return Stability
	 */
	public ApiResponse<Stability> occTabilityReport(JSONObject json, String serialNum, String loanId, String channel);
	
	
	

	/**
	 * 月度收支等级评估(月度收支等级评估产品是对用户入账和出账情况的统计评估，展示用户近18个月（自然月）的收支等级情况)
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return IncomeMonthLevel
	 */
	public ApiResponse<IncomeMonthLevel> occAccountchangeMonthReport(JSONObject json, String serialNum, String loanId, String channel);
	
	
	
	
	/**
	 * 支付消费评估(支付消费评估产品查询用户银行卡消费情况的统计评估，展示近12个月（自然月）支付行为情况（建议用户填其常用卡）)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return PaymentConsum
	 */
	public ApiResponse<PaymentConsum> occPaymentConsumReport(JSONObject json, String serialNum, String loanId, String channel);
	
	
	
	/**
	 * 百融评分(百融评分有三类：通用评分，客群评分和客制化评分,入选的评分模型的变量，会根据实际建模情况来定；通常采用以传统统计理论为基础的逻辑回归或机器学习算法建立评分模型)
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return OccScoreInfo
	 */
	public ApiResponse<OccScoreInfo> occScoreReport(JSONObject json, String serialNum, String loanId, String channel);
	
	
	
	
	
	/**
	 * 一卡贷：线上产品一次性打包调用
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @param channel
	 * @return
	 */
	public ApiResponse packAllInterfaceInfo(JSONObject json, String serialNum, String loanId, String channel);
	


	/**
	 * 借款设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return LoanFacilityInformation
	 */
	public ApiResponse<LoanFacilityInformation> loanFacilityInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 注册设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return RegisterFacilityInformation
	 */
	public ApiResponse<RegisterFacilityInformation> registerFacilityInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 登录设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return LoginFacilityInformation
	 */ 
	public ApiResponse<LoginFacilityInformation> loginFacilityInformationReport(JSONObject json,String serialNum,String loanId, String channel);

	/**
	 * 提现设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return CurrentEquipmentInformationReport
	 */
	public ApiResponse<CurrentEquipmentInformationReport> cashFacilityInformationReport(JSONObject json,String serialNum,String loanId, String channel);
	
	
	
	/**
	 *	设备信息核查
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return
	 */
	public ApiResponse<EquipmentInfor> equipmentInformationVerification(Map<String, String> map);
	
	
	
	
	/**
	 * 设备特殊名单
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return
	 */
	public ApiResponse<EquipmentSpecialList> equipmentSpecialListInfo(Map<String, String> map);
	
	
	/**
	 * 设备采集信息
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return
	 */
	public ApiResponse<EquipmentInfo> equipmentInfo(Map<String, String> map);
	
	
	
	
	/**
	 * 借款设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return LoanFacilityInformation
	 */
	public ApiResponse<LoanFacilityPackageInfo> loanFacilityInformationReportPack(Map<String, String> map);

	/**
	 * 注册设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return RegisterFacilityInformation
	 */
	public ApiResponse<RegisterFacilityPackageInfo> registerFacilityInformationReportPack(Map<String, String> map);

	/**
	 * 登录设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return LoginFacilityInformation
	 */ 
	public ApiResponse<LoginFacilityPackageInfo> loginFacilityInformationReportPack(Map<String, String> map);

	/**
	 * 提现设备信息
	 * 
	 * @param json
	 * @param serialNum
	 * @param loanId
	 * @return CurrentEquipmentInformationReport
	 */
	public ApiResponse<CurrentEquipmentPackageInfo> cashFacilityInformationReportPack(Map<String, String> map);
	
	
}
